package com.kaifamiao.queue;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 队列的特点是"先进先出"(First In, First Out)
 * 1、Queue接口中定义的方法(不抛出异常的方法)
 *      boolean offer( E e ) 在队列尾部追加新元素
 *      E peek() 检查队列头部元素(返回但不删除); 若队列为空则返回 null
 *      E poll() 获取并移除队列头部元素; 若队列为空则返回 null
 * 2、Queue接口中定义的方法(抛出异常的方法)
 *      boolean add( E e ) 在队列尾部追加新元素
 *      E element() 检查队列头部元素(返回但不删除); 若队列为空则抛出异常
 *      E remove() 获取并移除队列头部元素; 若队列为空则抛出异常
 */
public class QueueFeature {

    public static void main(String[] args) {

        Queue<String> queue = new LinkedList<>();

        queue.offer( "刘恒" );
        System.out.println( queue );

        queue.offer( "刘启" );
        System.out.println( queue );

        queue.offer( "刘彻" );
        System.out.println( queue );

        System.out.println( queue.peek() );
        System.out.println( queue );

        System.out.println( queue.poll() );
        System.out.println( queue );

        System.out.println( queue.poll() );
        System.out.println( queue );

        System.out.println( queue.poll() );
        System.out.println( queue );

        System.out.println( "- ".repeat( 10 ) );

        System.out.println( queue.peek() );
        System.out.println( queue.poll() );

        System.out.println( "- ".repeat( 10 ) );

        queue.add( "顺治" );
        queue.add( "康熙" );
        queue.add( "雍正" );
        System.out.println( queue );

        System.out.println( queue.element() );
        System.out.println( queue );

        System.out.println( queue.remove() );
        System.out.println( queue );

        System.out.println( queue.remove() );
        System.out.println( queue );

        System.out.println( queue.remove() );
        System.out.println( queue );

        // System.out.println( queue.element() ); // NoSuchElementException
        // System.out.println( queue.remove() ); // NoSuchElementException

    }

}
